package com.changgou.search.controller;


import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.search.service.SearchService;
import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;
import java.util.Set;

@RestController
@RequestMapping("/search")
public class SearchController {

	@Autowired
	SearchService searchService;

	//全文检索，检索ES中的skuInfo
	@GetMapping("/searchByMap")
	public Map searchByMap(@RequestParam Map<String,String> searchMap){
		this.handlerSearchMap(searchMap);
		Map map = searchService.searchByMap(searchMap);
		return map;
	}

	//定义修改url中 空格 为 + 的方法
	// （该方法作用是：spec_规格=8GB+128GB，在网络传输到控制层的编码过程中，+会变成空格，
	//   即，8GB+128GB会变成8GB 128GB，导致没法从ES索引中查询出来value为8GB 128GB的sku，
	//  所以，在这里，需要把空格转为+，然后再传递到业务层。。。
	//
	// 但是，要注意，需要使用字节数组，来一个一个转换，因为String.replace对于空格不好使，我不知道这是什么原因
	// 所以，下面又定义了一个方法，用于将字符串中的空格转为+。。。）
	public void handlerSearchMap(Map<String,String> map){
		if(null!=map){
			//将map转为set，用于遍历（或者获取键集合，keySet）
			Set<Map.Entry<String, String>> entries = map.entrySet();

			for (Map.Entry<String, String> entry : entries) {
				if (entry.getKey().startsWith("spec_")){
					//entry.getValue().replaceAll("\\s","+");
					String value1 = entry.getValue();
					String value2 = this.replaceSpace(value1); // 这里调用下面定义的：用于将字符串中的空格转为+方法
					map.put(entry.getKey(),value2);
				}
			}
		}
	}

	// 将字符串中的空格转为+
	public String replaceSpace(String value1){
		 char [] a = value1.toCharArray();
		 StringBuffer stringBuffer = new StringBuffer();
		 
		 for (int i = 0; i < a.length; i++) {
			if (a[i] == ' '){
				stringBuffer.append("+");
			}else {
				stringBuffer.append(a[i]);
			}
		 }

		 return stringBuffer.toString();
	}
}
